let keyDown = {
    graph: null,        // mxgraph实例
    keyHandler: null,   // 键盘事件监听
    undoMng: null,      // 状态管理器
}
// init回调函数：初始化状态管理器
function _initUndoManger() {
    // 创建了一个撤销管理器，可以实现操作的撤销
    keyDown.undoMng = new mxUndoManager();

    // 这个函数是给下面的监听用的
    let listen = (sender,evt) => {
        keyDown.undoMng.undoableEditHappened(evt.getProperty('edit'))
    }
    // 对graph面板添加监听
    // getModel: 返回包含单元格的mxGraphModel。
    // addListener: 将指定的函数绑定到给定的事件名。如果没有提供事件名称，则为所有事件注册侦听器。
    // 侦听器的参数是发送器和mxEventObject
    keyDown.graph.getModel().addListener(mxEvent.UNDO,listen)
    keyDown.graph.getView().addListener(mxEvent.UNDO,listen)
}
function init(graph) {
    keyDown.graph = graph;
    keyDown.keyHandler = new mxKeyHandler(graph);
    _delete();
    _initUndoManger();
    _ctrlZ();
    _ctrlY();
    _Arrows();
    return keyDown;
}
function _ctrlZ() {
    keyDown.keyHandler.bindControlKey(90,() => {
        keyDown.undoMng.undo();
    })
}
function _ctrlY() {
    keyDown.keyHandler.bindControlKey(89,() => {
        keyDown.undoMng.redo();
    })
}
function _delete() {
    keyDown.keyHandler.bindKey(46,() => {
        console.log('delete')
        keyDown.graph.removeCells(keyDown.graph.getSelectionCells())
    })
    keyDown.keyHandler.bindKey(8,() => {
        console.log('remove')
        keyDown.graph.removeCells(keyDown.graph.getSelectionCells())
    })
}
function _Arrows() {
    keyDown.keyHandler.bindKey(37,() => {
        console.log('left')
        console.log(keyDown.graph.getSelectionCells())
        if (!keyDown.graph.getSelectionCells().length) return;
        keyDown.graph.getSelectionCells().forEach((item,i) => {
            item.geometry.x -= 1;
            keyDown.graph.refresh();
        })
    })
    keyDown.keyHandler.bindKey(38,() => {
        console.log('top')
    })
    keyDown.keyHandler.bindKey(39,() => {
        console.log('right')
    })
    keyDown.keyHandler.bindKey(40,() => {
        console.log('bottom')
    })
}
export default init;